package com.yzh.zhipu.model.args;

import lombok.*;

import java.util.List;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
/**
 * chatglm-trubo、glm-3-trubo、glm-4、glm-4v模型 通用请求&响应消息体
 * 其中chatglm-trubo、glm-3-trubo、glm-4的content是String类型，glm-4v的content是List<Content>类型
 * 为了适配统一定义Object content，通过建造者模式构建不同的参数做适配
 */
public class Prompt {
    private String role;
    private Object content;

    public static Prompt.PromptBuilder builder() {
        return new Prompt.PromptBuilder();
    }

    /**
     * 使用建造者模式自定义组装方式（适配）（主要针对content字段）
     */
    public static class PromptBuilder {
        private String role;
        private Object content;

        public PromptBuilder() {
        }

        public PromptBuilder role(String role) {
            this.role = role;
            return this;
        }

        public PromptBuilder content(String content) {
            this.content = content;
            return this;
        }

        public PromptBuilder content(List<Content> list) {
            this.content = list;
            return this;
        }

        public Prompt build() {
            return new Prompt(role, content);
        }
    }

    /**
     * glm-4v 的参数
     */
    @Data
    @Builder
    public static class Content {
        private String type;        //类型： text（文字） / image_url（图片）
        private String text;        //文字type 若是图片类型则该参数为空
        private ImgUrl image_url;   //图片type 若是文字类型则该参数为空
    }

    @Getter
    @AllArgsConstructor
    public enum Type {
        text("text", "文字"),
        image_url("image_url", "图片URL"),

        ;
        private String code;
        private String info;
    }

    @AllArgsConstructor
    @Data
    public static class ImgUrl {
        private String url;
    }
}

